package ar.edu.utn.frba.dds.tp.homes;

import java.io.Serializable;
import java.util.List;

import org.uqbar.commons.model.UserException;

import ar.edu.utn.frba.dds.tp.code.Asientos.AsientoDeVuelo;
import uqbar.arena.persistence.PersistentHome;

public class AsientosHome extends PersistentHome<AsientoDeVuelo> implements Serializable {

	private static final long serialVersionUID = 1L;

	private static AsientosHome instance = new AsientosHome();
	
	public static AsientosHome getInstance() {
		return instance;
	}
	
	public void create(AsientoDeVuelo asiento) {
		verificarAsientoDuplicado(asiento);
		super.create(asiento);
	}
	
	private void verificarAsientoDuplicado(AsientoDeVuelo asiento) {
		AsientoDeVuelo example = new AsientoDeVuelo();
		example.setNumeroDeAsiento(asiento.getNumeroDeAsiento());
		example.setCodigoDeVuelo(asiento.getCodigoDeVuelo());
		if(!this.searchByExample(example).isEmpty())
			throw new UserException("Ya existe un Asiento de código " + asiento.getNumeroDeAsiento() + "en el vuelo "+ asiento.getCodigoDeVuelo());
	}
	
	@Override
	public Class<AsientoDeVuelo> getEntityType() {
		return AsientoDeVuelo.class;
	}

	@Override
	public AsientoDeVuelo createExample() {
		return new AsientoDeVuelo();
	}

	public List<AsientoDeVuelo> search(AsientoDeVuelo asiento) {
		
		AsientoDeVuelo example = new AsientoDeVuelo();
		example.setClase(asiento.getClase());
		example.setCodigoDeVuelo(asiento.getCodigoDeVuelo());
		example.setNumeroDeAsiento(asiento.getNumeroDeAsiento());
		example.setEstado(null);
		example.setUbicacion(asiento.getUbicacion());
		example.setVuelo(null);
		example.setNumeroDeAsiento(asiento.getNumeroDeAsiento());
		return this.searchByExample(example);
	}
}